package com.yunnuo.system.config.service.impl;

import com.yunnuo.system.comm.util.Empty;
import com.yunnuo.system.comm.util.StringUtils;
import com.yunnuo.system.comm.util.page.TableDataInfo;
import com.yunnuo.system.config.dao.IConfigDao;
import com.yunnuo.system.config.entity.Config;
import com.yunnuo.system.config.service.IConfigService;
import com.yunnuo.system.users.entity.PageParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;

import javax.persistence.criteria.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 系统参数 业务层处理
 * Created by 魏洪福(15064000912@163.com) on  2018/5/25.
 */
@Service
public class ConfigServiceImpl implements IConfigService
{
    @Autowired
    private IConfigDao configDao;

    /**
     * 查询参数配置信息
     *
     * @param configId 参数配置ID
     * @return 参数配置信息
     */
    @Override
    public Config selectConfigById(String configId)
    {
        return configDao.findOne(configId);
    }

    /**
     * 根据键名查询参数配置信息
     *
     * @param configKey 参数名称
     * @return 参数键值
     */
    @Override
    public String selectConfigByKey(String configKey)
    {
        Config config = configDao.findAllByConfigKey(configKey);
        return StringUtils.isNotNull(config) ? config.getConfigValue() : "";
    }

    /**
     * 查询参数配置列表
     *
     * @param config 参数配置信息
     * @return 参数配置集合
     */
    @Override
    public List<Config> selectConfigList(Config config)
    {
        return configDao.findAll();
    }

    /**
     * 新增参数配置
     *
     * @param config 参数配置信息
     * @return 结果
     */
    @Override
    public int insertConfig(Config config)
    {
        try{
            configDao.save(config);
            return 1;
        }catch (Exception e){
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 修改参数配置
     *
     * @param config 参数配置信息
     * @return 结果
     */
    @Override
    public int updateConfig(Config config)
    {
        try{
            configDao.save(config);
            return 1;
        }catch (Exception e){
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 保存参数配置
     *
     * @param config 参数配置信息
     * @return 结果
     */
    @Override
    public int saveConfig(Config config)
    {
        try{
            configDao.save(config);
            return 1;
        }catch (Exception e){
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 删除参数配置信息
     *
     * @param configId 参数配置ID
     * @return 结果
     */
    @Override
    public int deleteConfigById(String configId)
    {
        try{
            configDao.delete(configId);
            return 1;
        }catch (Exception e){
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 批量删除参数配置对象
     *
     * @param configIds 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int batchDeleteConfig(String[] configIds)
    {
        try{
            for (String id : configIds) {
                configDao.delete(id);
            }
            return 1;
        }catch (Exception e){
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 校验参数键名是否唯一
     *
     * @param config 参数配置信息
     * @return 结果  0-成功  1-失败
     */
    @Override
    public String checkConfigKeyUnique(Config config)
    {
        int count1=0 ;
        if(null!=config.getId()&&!"".equals(config.getId())){
            count1= configDao.countAllByIdAndConfigKey(config.getId(),config.getConfigKey());
            if (count1==1){
                return "0";
            }
        }
        return configDao.countAllByConfigKey(config.getConfigKey())+"";
//        if (config.getId() == null)
//        {
//            config.setId("-1");
//        }
//        String configId = config.getConfigId();
//        Config info = configMapper.selectConfigByKey(config.getConfigKey());
//        if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getConfigId())
//                && info.getConfigId().intValue() != configId.intValue())
//        {
//            return UserConstants.CONFIG_KEY_NOT_UNIQUE;
//        }
//        return "";

    }

    /**
     * 查询参数配置列表
     */
    @Override
    public TableDataInfo selectConfigListByPageParams(PageParams pageParams, PageRequest pageRequest) {
        TableDataInfo dataInfo=new TableDataInfo();
        Specification<Config> spec=new Specification<Config>() {
            @Override
            public Predicate toPredicate(Root<Config> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                Path<String> namePath=root.get("configName");
                String value=pageParams.getSearchValue();
                if (Empty.isNotEmpty(value)){
                    query.where(cb.like(namePath,"%"+value+"%"));
                }
                return null;
            }
        };
        Page<Config> pages=configDao.findAll(spec,pageRequest);
        dataInfo.setRows(pages.getContent());
        dataInfo.setTotal(pages.getTotalElements());
        return dataInfo;
    }

}
